home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
tools
/
czesc_2
/
guispell-1.0
/
textclip.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-03-25
|
2KB
|
102 lines
#error By license you aren't permitted to compile this. Read GUISpell.doc.
#include <string.h>
#include <libraries/iffparse.h> // Why is this needed with proto/all.h?
#include <proto/iffparse.h>
#include "libraries.h"
// Check if 0. If not, then die.
#define CHECK0(a) if (a) goto die
// Check if non-0. If not, then die.
#define CHECKN0(a) if (!(a)) goto die
// Check if greater than or equal to 0. If not, then die.
#define CHECKGE0(a) if ((a) < 0) goto die
void TextToClip (char *s)
{
struct IFFHandle *iff;
CHECKN0 (iff = AllocIFF ());
CHECKN0 (iff->iff_Stream = (ULONG) OpenClipboard (PRIMARY_CLIP));
InitIFFasClip (iff);
CHECK0 (OpenIFF (iff, IFFF_WRITE));
CHECKGE0 (PushChunk (iff, 'FTXT', 'FORM', IFFSIZE_UNKNOWN));
CHECKGE0 (PushChunk (iff, 0, 'CHRS', IFFSIZE_UNKNOWN));
CHECKGE0 (WriteChunkBytes (iff, s, strlen (s)));
CHECKGE0 (PopChunk (iff));
//CHECKGE0 (PushChunk (iff, 0L, 'ANNO', IFFSIZE_UNKNOWN));
//CHECKGE0 (WriteChunkBytes (iff, "written by IGadSpell and iffparse", 33));
//CHECKGE0 (PopChunk (iff));
CHECKGE0 (PopChunk (iff));
die:
if (iff)
{
CloseIFF (iff);
if (iff->iff_Stream)
CloseClipboard ((struct ClipboardHandle *) iff->iff_Stream);
FreeIFF (iff);
}
}
int TextFromClip (char *buffer, int size)
{
struct IFFHandle *iff;
int good_read = 0;
CHECKN0 (iff = AllocIFF ());
CHECKN0 (iff->iff_Stream = (ULONG) OpenClipboard (PRIMARY_CLIP));
InitIFFasClip (iff);
CHECK0 (OpenIFF (iff, IFFF_READ));
for (;;)
{
switch (ParseIFF (iff, IFFPARSE_RAWSTEP))
{
case IFFERR_EOC:
break;
case IFFERR_EOF:
goto die;
case 0:
{
struct ContextNode *chunk = CurrentChunk (iff);
if (chunk && chunk->cn_ID == 'CHRS' && chunk->cn_Type == 'FTXT')
{
int bytes_read = ReadChunkBytes (iff, buffer, size);
if (chunk->cn_Size == bytes_read)
good_read = 1;
if (chunk->cn_Size > bytes_read)
good_read = -1;
if (!bytes_read && chunk->cn_Size)
good_read = 0;
buffer[bytes_read < size ? bytes_read : size - 1] = '\0';
goto die;
}
break;
}
default:
goto die;
}
}
die:
if (iff)
{
CloseIFF (iff);
if (iff->iff_Stream)
CloseClipboard ((struct ClipboardHandle *)iff->iff_Stream);
FreeIFF (iff);
}
return good_read;
}